package service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import model.Admin;
import model.User;
import util.FileHandler;

public class UserService {
    private static final String USER_FILE = "users.dat";
    private List<User> users;

    public UserService() {
        users = FileHandler.loadData(USER_FILE);
        if (users == null) users = new ArrayList<>();
        initDefaultAdmin();
    }

    // 初始化默认管理员admin
    private void initDefaultAdmin() {
        boolean hasAdmin = false;
        for (User user : users) {
            if (user instanceof Admin && "admin".equals(user.getUsername())) {
                hasAdmin = true;
                break;
            }
        }
        if (!hasAdmin) {
            Admin admin = new Admin("AD001", "admin", "ynuinfo#777",
                    "13800138000", new Date());
            users.add(admin);
            saveUsers();
        }
    }

    // 保存用户数据
    public void saveUsers() {
        FileHandler.saveData(users, USER_FILE);
    }

    // 根据用户名查找用户
    public User findUser(String username) {
        for (User user : users) {
            if (user.getUsername().equals(username)) {
                return user;
            }
        }
        return null;
    }

    // 根据ID或用户名查询用户
    public User queryUser(String keyword) {
        for (User user : users) {
            if (user.getUserId().equals(keyword) || user.getUsername().equals(keyword)) {
                return user;
            }
        }
        return null;
    }

    // 列出所有用户
    public List<User> listAllUsers() {
        return new ArrayList<>(users);
    }

    // 增加用户（带唯一性检查）
    public boolean addUser(User user) {
        // 检查ID唯一
        for (User u : users) {
            if (u.getUserId().equals(user.getUserId())) {
                return false;
            }
        }
        // 检查用户名唯一
        for (User u : users) {
            if (u.getUsername().equals(user.getUsername())) {
                return false;
            }
        }
        // 检查手机号唯一
        for (User u : users) {
            if (u.getPhone().equals(user.getPhone())) {
                return false;
            }
        }
        users.add(user);
        saveUsers();
        return true;
    }

    // 删除用户（禁止删除admin）
    public boolean deleteUser(String username) {
        if ("admin".equals(username)) {
            return false;
        }
        for (int i = 0; i < users.size(); i++) {
            if (users.get(i).getUsername().equals(username)) {
                users.remove(i);
                saveUsers();
                return true;
            }
        }
        return false;
    }

    // 重置用户密码
    public boolean resetPassword(String username, String role) {
        for (User user : users) {
            if (user.getUsername().equals(username) && user.getUserType().equals(role)) {
                user.setPassword("123456");
                saveUsers();
                return true;
            }
        }
        return false;
    }

    // 修改用户信息（经理/前台）
    public boolean updateUser(String username, String newPhone, String newRole) {
        for (User user : users) {
            if (user.getUsername().equals(username) &&
                    ("经理".equals(user.getUserType()) || "前台".equals(user.getUserType()))) {
                // 检查手机号唯一性
                for (User u : users) {
                    if (!u.getUsername().equals(username) && u.getPhone().equals(newPhone)) {
                        return false;
                    }
                }
                user.setPhone(newPhone);
                user.setUserType(newRole);
                saveUsers();
                return true;
            }
        }
        return false;
    }
}